package com.boost.tjvm;

public class DynamicDispatch {
    static abstract class Human {
        protected abstract void sayHello();
    }

    static class Man extends Human {
        @Override
        protected void sayHello() {
            System.out.println("man say hello!");
        }
    }

    static class Woman extends Human {
        @Override
        protected void sayHello() {
            System.out.println("woman say hello!");
        }
    }

    /**
     * 动态分派
     * 1、找到操作数栈顶第一个元素 C
     * 2、如果C的常量中的描述和名称都相符的方法，返回直接引用
     * 3、否则查找 继承关系 从上往下依次对C的父类进行依次查找
     * 4、如果没找到跑出异常
     * @param args
     */
    public static void main(String[] args) {
        Human man = new Man();
        Human woman = new Woman();
        man.sayHello();
        woman.sayHello();
        man = new Woman();
        man.sayHello();
    }
}
